using System;

namespace StringValueOrReference
{
	class Program
	{
		internal static void ValueOrReference(Type type)
		{
			String result = "The type " + type.Name;
			
			if(type.IsValueType)
				Console.WriteLine(result + " is a value type.");
			else
				Console.WriteLine(result + " is a reference type.");
		}
		
		internal static void ModifyString(String text)
		{
			text = "world";
		}
		
		static void Main(string[] args)
		{
			String text = "hello";
			
			ValueOrReference(text.GetType());
			ModifyString(text);
			
			Console.WriteLine(text);
		}
	}
}

/*答案：输出两行。第一行是The type String is reference type. 第二行是hello。类型String的定义是public sealed class String {...}，既然是class，那么String就是引用类型。

在方法ModifyString里，对text赋值一个新的字符串，此时改变的不是原来text的内容，而是把text指向一个新的字符串"world"。由于参数text没有加ref或者out，出了方法之后，text还是指向原来的字符串，因此输出仍然是"hello".*/